package com.cy.store.controller;

import com.cy.store.controller.ex.*;
import com.cy.store.service.ex.*;
import com.cy.store.util.JsonResult;
import org.springframework.web.bind.annotation.ExceptionHandler;

import javax.servlet.http.HttpSession;

//控制层基类
public class BaseController {
//    操作成功状态码
    public static final int OK = 200;

//    用于统一处理抛出的异常
//    该方法返回值是将要传递给前端的数据
//    自动将异常对象传递给此方法的参数列表上，所以要加上参数
//    项目中产生了异常，被统一拦截到该方法中，该方法就充当处理异常的功能，并将结果返回给前端
    @ExceptionHandler({ServiceException.class, FileUploadException.class})
    public JsonResult<Void> handleException(Throwable e){
        JsonResult<Void> result = new JsonResult<>(e);
        if(e instanceof UsernameDuplicateException){
            result.setState(4000);
            result.setMessage("用户名被占用异常");
        } else if (e instanceof UserNotFoundException) {
            result.setState(4001);
            result.setMessage("用户数据不存在异常");
        } else if (e instanceof PasswordNotMatchException) {
            result.setState(4002);
            result.setMessage("用户密码错误异常");
        } else if (e instanceof AddressCountLimitException) {
            result.setState(4003);
            result.setMessage("用户地址数量超过上限");
        } else if (e instanceof AddressNotFoundException) {
            result.setState(4004);
            result.setMessage("用户地址查找失败");
        } else if (e instanceof AccessDeniedException) {
            result.setState(4005);
            result.setMessage("用户非法操作");
        } else if (e instanceof ProductNotFoundException) {
            result.setState(4006);
            result.setMessage("尝试访问的商品数据不存在");
        } else if (e instanceof CartNotFoundException) {
            result.setState(4007);
            result.setMessage("查找的购物车数据不存在");
        } else if(e instanceof InsertException){
            result.setState(5000);
            result.setMessage("注册产生未知异常");
        } else if(e instanceof UpdateException){
            result.setState(5001);
            result.setMessage("密码修改异常");
        } else if (e instanceof  DeleteException) {
            result.setState(5002);
            result.setMessage("删除异常");
        } else if(e instanceof FileEmptyExcaption){
            result.setState(6000);
            result.setMessage("文件为空异常");
        } else if(e instanceof FileSizeException){
            result.setState(6001);
            result.setMessage("文件大小超限制异常");
        } else if(e instanceof FileTypeException){
            result.setState(6002);
            result.setMessage("文件类型异常");
        } else if(e instanceof FileStateException){
            result.setState(6003);
            result.setMessage("文件状态异常");
        } else if(e instanceof FileUploadIOException){
            result.setState(6004);
            result.setMessage("文件读写异常");
        }
        return result;
    }

    //从session对象中获取数据
    /**
     * 获取session对象中的uid
     * @param session session对象
     * @return 当前登录用户的uid值
     */
    public final Integer getUidFromSession(HttpSession session){
        //使用Integer.valueOf将结果从String转换成Integer
        return Integer.valueOf(session.getAttribute("uid").toString());

    }
    /**
     * 获取session对象中的username
     * @param session session对象
     * @return 当前登录用户的username值
     */
    public final String getUsernameFromSession(HttpSession session){
        return session.getAttribute("username").toString();
    }
}
